/**
 * API工具函数
 * 处理全局API错误和请求拦截
 */

import { navigateToLogin, isLoginPage } from './url';

/**
 * 处理API错误
 * @param error 错误对象
 * @returns 是否已处理错误
 */
export const handleApiError = (error: any): boolean => {
  // 处理401未授权错误
  if (error?.response?.status === 401) {
    console.warn('API returned 401, handling unauthorized error');
    
    // 如果当前在登录页面，不进行跳转
    if (isLoginPage()) {
      console.log('Current page is login page, skipping redirect');
      return true;
    }
    
    // 跳转到登录页面
    navigateToLogin();
    return true;
  }
  
  return false;
};

/**
 * 处理API请求错误
 * 统一处理401错误，其他错误正常抛出
 */
export const handleRequestError = (error: any): void => {
  // 尝试处理API错误（主要是401）
  const handled = handleApiError(error);
  
  if (!handled) {
    // 其他错误正常抛出
    throw error;
  }
};

/**
 * 初始化全局API错误处理
 * 设置全局错误监听器
 */
export const initGlobalErrorHandling = (): (() => void) => {
  const handleUnhandledRejection = (event: PromiseRejectionEvent) => {
    console.error('Unhandled promise rejection:', event.reason);
    
    // 尝试处理API错误（主要是401）
    if (event.reason && typeof event.reason === 'object') {
      handleApiError(event.reason);
    }
  };

  // 只监听未处理的Promise错误
  window.addEventListener('unhandledrejection', handleUnhandledRejection);

  // 返回清理函数
  return () => {
    window.removeEventListener('unhandledrejection', handleUnhandledRejection);
  };
};
